package cn.iocoder.yudao.hires.service.notice.impl;

import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.hires.entity.NoticeEnterpriseDO;
import cn.iocoder.yudao.hires.mapper.NoticeApplicationMapper;
import cn.iocoder.yudao.hires.mapper.NoticeEnterpriseMapper;
import cn.iocoder.yudao.hires.service.notice.NoticeEnterpriseService;
import cn.iocoder.yudao.hires.vo.noticeenterprise.NoticeEnterprisePageReqVO;
import cn.iocoder.yudao.hires.vo.noticeenterprise.NoticeEnterpriseSaveReqVO;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

import javax.annotation.Resource;
import java.util.List;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.NOT_EXISTS;

/**
 * 下游-企业人才库 Service 实现类
 *
 * @author 超级管理员
 */
@Service
@Validated
public class NoticeEnterpriseServiceImpl implements NoticeEnterpriseService {

    @Resource
    NoticeApplicationMapper noticeApplicationMapper;
    @Resource
    private NoticeEnterpriseMapper noticeEnterpriseMapper;

    @Override
    public Long createNoticeEnterprise(NoticeEnterpriseSaveReqVO createReqVO) {
        // 插入
        NoticeEnterpriseDO noticeEnterprise = BeanUtils.toBean(createReqVO, NoticeEnterpriseDO.class);

//        PostTionShortVo category = noticeApplicationMapper.getCategory(noticeEnterprise.getPositionId());
        noticeEnterprise.setPositionCategoryId(Math.toIntExact(createReqVO.getPositionId()));
        noticeEnterprise.setPositionCategoryName(createReqVO.getPositionName());
        noticeEnterpriseMapper.insert(noticeEnterprise);
        // 返回
        return noticeEnterprise.getId();
    }

    @Override
    public void updateNoticeEnterprise(NoticeEnterpriseSaveReqVO updateReqVO) {
        // 校验存在
        validateNoticeEnterpriseExists(updateReqVO.getId());
        // 更新
        NoticeEnterpriseDO updateObj = BeanUtils.toBean(updateReqVO, NoticeEnterpriseDO.class);
        noticeEnterpriseMapper.updateById(updateObj);
    }

    @Override
    public void deleteNoticeEnterprise(Long id) {
        // 校验存在
        validateNoticeEnterpriseExists(id);
        // 删除
        noticeEnterpriseMapper.deleteById(id);
    }

    private void validateNoticeEnterpriseExists(Long id) {
        if (noticeEnterpriseMapper.selectById(id) == null) {
            throw exception(NOT_EXISTS);
        }
    }

    @Override
    public NoticeEnterpriseDO getNoticeEnterprise(Long id) {
        return noticeEnterpriseMapper.selectById(id);
    }

    @Override
    public PageResult<NoticeEnterpriseDO> getNoticeEnterprisePage(NoticeEnterprisePageReqVO pageReqVO) {
        return noticeEnterpriseMapper.selectPage(pageReqVO);
    }

    @Override
    public List<NoticeEnterpriseDO> getNoticeEnterpriseList(Integer positionId, String positionName, Long tenantId) {
        return noticeEnterpriseMapper.getNoticeApplicationMySelfList(positionId, positionName, tenantId);
    }

    /**
     * 当前人员是否在企业的人才库
     *
     * @param userId
     * @param intentionPost
     * @param tenantId
     * @return
     */
    @Override
    public boolean getNoticeEnterpriseListEnterpr(Integer userId, String collect, Integer tenantId) {
        List<NoticeEnterpriseDO> noticeEnterpriseDOS = noticeEnterpriseMapper.selectList(new LambdaQueryWrapper<NoticeEnterpriseDO>().eq(NoticeEnterpriseDO::getUserId, userId).eq(NoticeEnterpriseDO::getTenantId, tenantId).in(NoticeEnterpriseDO::getPositionId, collect));
        return CollUtil.isNotEmpty(noticeEnterpriseDOS);
    }

}